package com.ken.mall.comm;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
@EnableCaching
public class RedisPool{

    @Value("${spring.redis.database}")
    private  String database;//数据库名
    @Value("${spring.redis.host}")
    private  String host;//域名
    @Value("${spring.redis.port}")
    private  Integer port;//端口
    @Value("${spring.redis.password}")
    private  String password;//密码
    @Value("${spring.redis.jedis.pool.max-active}")
    private  Integer maxTotal;//最大连接数
    @Value("${spring.redis.jedis.pool.max-idle}")
    private  Integer maxIdle;//在jedispool中最大的idle状态（空闲的）的jedis实例的个数
    @Value("${spring.redis.jedis.pool.min-idle}")
    private  Integer minIdle;//在jedispool中最小的idle状态（空闲的）的jedis实例的个数
    @Value("${spring.redis.testOnBorrow}")
    private  Boolean testOnBorrow;//在borrow一个jedis实例的时候是否要进行验证操作，如果赋值true。则得到的jedis实例肯定是可以用的
    @Value("${spring.redis.testOnReturn}")
    private  Boolean testOnReturn;//在return一个jedis实例的时候是否要进行验证操作，如果赋值true。则返回的jedis实例肯定是可以用的

    @Bean
    public JedisPool initPool(){
        System.out.println("初始化redis连接池===========");
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);
        config.setTestOnBorrow(testOnBorrow);
        config.setTestOnReturn(testOnReturn);
        config.setBlockWhenExhausted(true);//连接耗尽时是否阻塞，false会抛出异常，true阻塞知道超时。默认true
        JedisPool jedisPool = new JedisPool(config,host,port,1000*2, StringUtils.isNotBlank(password)?password:null,0);
        return jedisPool;
    }

}
